package org.dromara.system.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.api.domain.vo.RemoteStoreVo;
import org.dromara.system.domain.bo.SysStoreBo;
import org.dromara.system.domain.vo.SysStoreRequestVo;
import org.dromara.system.domain.vo.SysStoreVo;

import java.util.List;
import java.util.Map;

/**
 * 系统管理-门店配置Service接口
 *
 * @author LionLi
 * @date 2024-03-18
 */
public interface ISysStoreService {

    /**
     * 查询系统管理-门店配置
     */
    SysStoreVo queryById(Long storeId);

    /**
     * 查询系统管理-门店配置列表
     */
    TableDataInfo<SysStoreVo> queryPageList(SysStoreBo bo, PageQuery pageQuery);

    /**
     * 通过门店获取设备信息
     * @param sysStoreVos
     * @param isDevice
     * @return
     */
    List<SysStoreVo> buildDeviceInfoByStoreIds( List<SysStoreVo> sysStoreVos,Boolean isDevice);


    /**
     * 通过门店获取设备信息
     * @param sysStoreVos
     * @return
     */
    List<SysStoreVo> buildDeviceInfoByStoreIds(List<SysStoreVo> sysStoreVos);

    /**
     * 查询系统管理-门店配置列表
     */
    List<SysStoreVo> queryList(SysStoreBo bo);

    /**
     * 新增系统管理-门店配置
     */
    Long insertByBo(SysStoreBo bo);

    /**
     * 修改系统管理-门店配置
     */
    Boolean updateByBo(SysStoreBo bo);


    /**
     * 检查门店编码是否存在
     */
   Boolean checkStoreCode(SysStoreBo bo);

    /**
     * 批量修改营业时间
     * @param vo
     * @return
     */
    Boolean updateTime(SysStoreRequestVo vo);


    /**
     * 根据店铺ID列表查询店铺名称列表
     *
     * @param storeIds 店铺ID列表
     * @return 包含店铺名称的RemoteStoreVo对象列表
     */
    List<RemoteStoreVo> selectNamesByStoreList(List<Long> storeIds);


    /**
     * 根据店铺ID列表查询上级名称列表
     *
     * @param storeIds 店铺ID列表
     * @return 包含店铺名称的RemoteStoreVo对象列表
     */
    List<RemoteStoreVo> selectGroupNamesByStoreList(List<Long> storeIds);

    /**
     * 删除门店
     * @param storeId
     * @return
     */
    Boolean deleteStoreById(Long storeId);

    /**
     * 根据门店id获取区域id
     * @param storeId
     * @return
     */
    Long selectGroupIdByStoreId(Long storeId);

    List<RemoteStoreVo> queryStoreByGroupIds(List<Long> groupIds);

    /**
     * 根据门店ids 查询门店是否存在
     * @param storeIds
     * @return
     */
    Map<Long, Boolean> queryIsStore(List<Long> storeIds);

    /**
     * 获取全部门店
     * @return
     */
    List<RemoteStoreVo> queryStore();
}


